#ifndef MTEXPRESSION_H
#define MTEXPRESSION_H

#include "MTNode.hpp"
#include <string>

namespace MathematicaTranslator
{

	/**
	  *  Main holder for each expression that could be evaluated.
	  */
	class MTExpression : public MTNode {

	public:
		MTExpression() {}
		virtual std::string* generateCode(CodeGenContext& context);
		///Get the best type that fits the underlying expression
		virtual std::string* getType();
		/**
		  *  Get the number of elements in underlying expression
		  *  \note for primitves returns 1, for vector/matrix returns number of elements
		  *  \return number of elements as string 
		  */  
		virtual std::string* getNumberOfElements();
		
		virtual int getClassType();
	}; 

}
#endif
